package com.demo.common.support.page;

import org.springframework.data.domain.Sort;

import java.util.Map;

/**
 * 前后端数据交互分页抽像接口
 *
 * @param <T> 如果泛型指定为一个实体,则在{@link #getSearch()}时,将获取参数封装后的实体
 *            如果泛型是一个集合{@link java.util.Collection},则将会参数封闭到集合队列中
 *            如果未指定泛型,则通过{@link Map <String,Searchable>}进行返回
 * @author molong
 * @since 2024/5/24
 */
public interface Pageable<T> {

    /**
     * 最大分页大小,大于此值,抛出{@link IllegalArgumentException}
     */
    int DEFAULT_MAX_PAGE_SIZE = 0x3e8;

    /**
     * 最小分页当前页面值,小于此值,抛出{@link IllegalArgumentException}
     */
    int DEFAULT_MIN_PAGE = 0x1;


    /**
     * 默认分页值
     */
    int DEFAULT_MIN_PAGE_SIZE = 10;

    /**
     * 最小分页不小于10条记录,小于此值,抛出{@link IllegalArgumentException}
     */
    int MINI_NUM_PAGE_SIZE = 0x1;

    /**
     * 获取当前页位置
     *
     * @return 当前页
     */
    int getCurrPage();

    /**
     * 获取分页大小
     *
     * @return 分页大小值
     */
    int getPageSize();

    /**
     * 获取条件查询封装
     *
     * @return 条件查询集合
     */
    T getSearch();


}
